home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
dev
/
obero
/
oberon_lib.lha
/
oberon-a
/
source1.lha
/
source
/
Amiga
/
AmigaGuide.mod
next >
Wrap
Text File
|
1994-08-08
|
13KB
|
421 lines
(**************************************************************************
$RCSfile: AmigaGuide.mod $
Description: Interface to amigaguide.library
Created by: fjc (Frank Copeland)
$Revision: 3.2 $
$Author: fjc $
$Date: 1994/08/08 01:13:39 $
Includes Release 40.15
(C) Copyright 1990-1993 Commodore-Amiga, Inc.
All Rights Reserved
Oberon-A Interface Copyright © 1994, Frank Copeland.
This file is part of the Oberon-A Interface.
See Oberon-A.doc for conditions of use and distribution.
*************************************************************************)
MODULE AmigaGuide;
(*
** $C- CaseChk $I- IndexChk $L+ LongAdr $N- NilChk
** $P- PortableCode $R- RangeChk $S- StackChk $T- TypeChk
** $V- OvflChk $Z- ZeroVars
*)
IMPORT E := Exec, U := Utility, D := Dos, I := Intuition, SYS := SYSTEM;
TYPE
(**-- Pointer declarations ---------------------------------------------*)
AmigaGuideMsgPtr * = CPOINTER TO AmigaGuideMsg;
ContextTablePtr * = CPOINTER TO ContextTable;
NewAmigaGuidePtr * = CPOINTER TO NewAmigaGuide;
XRefPtr * = CPOINTER TO XRef;
AmigaGuideHostPtr * = CPOINTER TO AmigaGuideHost;
MsgPtr * = CPOINTER TO Msg;
OpFindHostPtr * = CPOINTER TO OpFindHost;
OpNodeIOPtr * = CPOINTER TO OpNodeIO;
OpExpungeNodePtr * = CPOINTER TO OpExpungeNode;
(**-- Library definitions ----------------------------------------------*)
CONST
apshToolId * = 11000;
startupMsgId * = apshToolId+1; (* Startup message *)
loginToolId * = apshToolId+2; (* Login a tool SIPC port *)
logoutToolId * = apshToolId+3; (* Logout a tool SIPC port *)
shutdownMsgId * = apshToolId+4; (* Shutdown message *)
activateToolId * = apshToolId+5; (* Activate tool *)
deactivateToolId * = apshToolId+6; (* Deactivate tool *)
activeToolId * = apshToolId+7; (* Tool Active *)
inactiveToolId * = apshToolId+8; (* Tool Inactive *)
toolStatusId * = apshToolId+9; (* Status message *)
toolCmdId * = apshToolId+10; (* Tool command message *)
toolCmdReplyId * = apshToolId+11; (* Reply to tool command *)
shutdownToolId * = apshToolId+12; (* Shutdown tool *)
(* Attributes accepted by GetAmigaGuideAttr() *)
agaDummy * = U.tagUser;
agaPath * = agaDummy+1;
agaXRefList * = agaDummy+2;
agaActivate * = agaDummy+3;
agaContext * = agaDummy+4;
agaHelpGroup * = agaDummy+5; (* E.ULONG: Unique identifier *)
agaReserved1 * = agaDummy+6;
agaReserved2 * = agaDummy+7;
agaReserved3 * = agaDummy+8;
agaARexxPort * = agaDummy+9;
(* E.MsgPortPtr: Pointer to the ARexx message port (V40) *)
agaARexxPortName * = agaDummy+10;
(* E.STRPTR: Used to specify the ARexx port name (V40) (not copied) *)
TYPE
AmigaGuideContext * = CPOINTER TO RECORD END;
AmigaGuideMsg * = RECORD (E.Message) (* Embedded Exec message structure *)
agmType * : E.ULONG; (* Type of message *)
data * : E.APTR; (* Pointer to message data *)
dSize * : E.ULONG; (* Size of message data *)
dType * : E.ULONG; (* Type of message data *)
priRet * : E.ULONG; (* Primary return value *)
secRet * : E.ULONG; (* Secondary return value *)
system1 * : E.APTR;
system2 * : E.APTR;
END;
(* Allocation description structure *)
ContextTable * = ARRAY 32767 OF E.STRPTR;
NewAmigaGuide * = RECORD
lock * : D.FileLockPtr; (* Lock on the document directory *)
name * : E.STRPTR; (* Name of document file *)
screen * : I.ScreenPtr; (* Screen to place windows within *)
pubScreen * : E.STRPTR; (* Public screen name to open on *)
hostPort * : E.STRPTR; (* Application's ARexx port name *)
clientPort * : E.STRPTR; (* Name to assign to the clients ARexx port *)
baseName * : E.STRPTR; (* Base name of the application *)
flags * : SET; (* Flags *)
context * : ContextTablePtr; (* NULL terminated context table *)
node * : E.STRPTR; (* Node to align on first (defaults to Main) *)
line * : LONGINT; (* Line to align on *)
extens * : U.TagListPtr; (* Tag array extension *)
client : E.APTR; (* Private! MUST be NULL *)
END;
CONST
(* public Client flags *)
loadIndex * = 0; (* Force load the index at init time *)
loadAll * = 1; (* Force load the entire database at init *)
cacheNode * = 2; (* Cache each node as visited *)
cacheDb * = 3; (* Keep the buffers around until expunge *)
unique * = 15; (* Unique ARexx port name *)
noActivate * = 16; (* Don't activate window *)
sysGads * = 31;
(* Callback function ID's *)
hOpen * = 0;
hClose * = 1;
errNotEnoughMemory * = 100;
errCantOpenDatabase * = 101;
errCantFindNode * = 102;
errCantOpenNode * = 103;
errCantOpenWindow * = 104;
errInvalidCommand * = 105;
errCantComplete * = 106;
errPortClosed * = 107;
errCantCreatePort * = 108;
errKeywordNotFound * = 113;
TYPE
(* Cross reference node *)
XRef * = RECORD (E.Node) (* Embedded node *)
pad * : E.UWORD; (* Padding *)
df * : E.APTR (*DocFilePtr*); (* Document defined in *)
file * : E.STRPTR; (* Name of document file *)
xrName * : E.STRPTR; (* Name of item *)
line * : LONGINT; (* Line defined at *)
END;
CONST
xrSize * = SIZE (XRef);
(* Types of cross reference nodes *)
xrGeneric * = 0;
xrFunction * = 1;
xrCommand * = 2;
xrInclude * = 3;
xrMacro * = 4;
xrStruct * = 5;
xrField * = 6;
xrTypedef * = 7;
xrDefine * = 8;
TYPE
(* Callback handle *)
AmigaGuideHost * = RECORD (U.Hook) (* Dispatcher *)
reserved * : E.ULONG; (* Must be 0 *)
flags * : SET;
useCnt * : E.ULONG; (* Number of open nodes *)
systemData : E.APTR; (* Reserved for system use *)
userData * : E.APTR; (* Anything you want... *)
END;
CONST
(* Methods *)
hmFindnode * = 1;
hmOpennode * = 2;
hmClosenode * = 3;
hmExpunge * = 10; (* Expunge DataBase *)
TYPE
Msg * = RECORD
methodID * : E.ULONG;
END;
(* hmFindnode *)
OpFindHost * = RECORD (Msg)
attrs - : U.TagListPtr; (* R: Additional attributes *)
node - : E.STRPTR; (* R: Name of node *)
TOC * : E.STRPTR; (* W: Table of Contents *)
title * : E.STRPTR; (* W: Title to give to the node *)
next * : E.STRPTR; (* W: Next node to browse to *)
prev * : E.STRPTR; (* W: Previous node to browse to *)
END;
(* hmOpennode, hmClosenode *)
OpNodeIO * = RECORD (Msg)
attrs - : U.TagListPtr; (* R: Additional attributes *)
node - : E.STRPTR; (* R: Node name and arguments *)
fileName * : E.STRPTR; (* W: File name buffer *)
docBuffer * : E.STRPTR; (* W: Node buffer *)
buffLen * : E.ULONG; (* W: Size of buffer *)
flags * : SET; (* RW: Control flags *)
END;
CONST
(* OpNodeIO.flags *)
nKeep * = 0; (* Don't flush this node until database is
* closed. *)
nReserved1 * = 1; (* Reserved for system use *)
nReserved2 * = 2; (* Reserved for system use *)
nAscii * = 3; (* Node is straight ASCII *)
nReserved3 * = 4; (* Reserved for system use *)
nClean * = 5; (* Remove the node from the database *)
nDone * = 6; (* Done with node *)
(* OpNodeIO.attrs *)
naDummy * = U.tagUser;
naScreen * = naDummy+1; (* I.ScreenPtr: Screen that window resides in *)
naPens * = naDummy+2; (* Pen array (from DrawInfo) *)
naRectangle * = naDummy+3; (* Window box *)
naHelpGroup * = naDummy+5; (* E.ULONG: unique identifier *)
TYPE
(* hmExpunge *)
OpExpungeNode * = RECORD (Msg)
attrs - : U.TagListPtr; (* R: Additional attributes *)
END;
(**-- Library Base variable --------------------------------------------*)
CONST
name * = "amigaguide.library";
TYPE
AmigaGuideBasePtr* = CPOINTER TO AmigaGuideBase;
AmigaGuideBase* = RECORD (E.Library) END;
VAR
base* : AmigaGuideBasePtr;
(**-- Library Functions ------------------------------------------------*)
(*--- functions in V40 or higher (Release 3.1) ---*)
(* Public entries *)
LIBCALL (base : AmigaGuideBasePtr) LockAmigaGuideBase *
( handle [8] : AmigaGuideContext )
: LONGINT;
-36;
LIBCALL (base : AmigaGuideBasePtr) UnlockAmigaGuideBase *
( key [0] : LONGINT );
-42;
LIBCALL (base : AmigaGuideBasePtr) OpenAmigaGuideA *
( VAR nag [8] : NewAmigaGuide;
attrs [9] : ARRAY OF U.TagItem )
: AmigaGuideContext;
-54;
LIBCALL (base : AmigaGuideBasePtr) OpenAmigaGuide *
( VAR nag [8] : NewAmigaGuide;
attrs [9]..: U.Tag )
: AmigaGuideContext;
-54;
LIBCALL (base : AmigaGuideBasePtr) OpenAmigaGuideAsyncA *
( VAR nag [8] : NewAmigaGuide;
attrs [0] : ARRAY OF U.TagItem )
: AmigaGuideContext;
-60;
LIBCALL (base : AmigaGuideBasePtr) OpenAmigaGuideAsync *
( VAR nag [8] : NewAmigaGuide;
attrs [0]..: U.Tag )
: AmigaGuideContext;
-60;
LIBCALL (base : AmigaGuideBasePtr) CloseAmigaGuide *
( cl [8] : AmigaGuideContext );
-66;
LIBCALL (base : AmigaGuideBasePtr) AmigaGuideSignal *
( cl [8] : AmigaGuideContext )
: E.ULONG;
-72;
LIBCALL (base : AmigaGuideBasePtr) GetAmigaGuideMsg *
( cl [8] : AmigaGuideContext )
: AmigaGuideMsgPtr;
-78;
LIBCALL (base : AmigaGuideBasePtr) ReplyAmigaGuideMsg *
( amsg [8] : AmigaGuideMsgPtr );
-84;
LIBCALL (base : AmigaGuideBasePtr) SetAmigaGuideContextA *
( cl [8] : AmigaGuideContext;
id [0] : E.ULONG;
attrs [1] : ARRAY OF U.TagItem )
: BOOLEAN;
-90;
LIBCALL (base : AmigaGuideBasePtr) SetAmigaGuideContext *
( cl [8] : AmigaGuideContext;
id [0] : E.ULONG;
attrs [1] ..: U.Tag )
: BOOLEAN;
-90;
LIBCALL (base : AmigaGuideBasePtr) SendAmigaGuideContextA *
( cl [8] : AmigaGuideContext;
attrs [0] : ARRAY OF U.TagItem )
: BOOLEAN;
-96;
LIBCALL (base : AmigaGuideBasePtr) SendAmigaGuideContext *
( cl [8] : AmigaGuideContext;
attrs [0]..: U.Tag )
: BOOLEAN;
-96;
LIBCALL (base : AmigaGuideBasePtr) SendAmigaGuideCmdA *
( cl [8] : AmigaGuideContext;
cmd [0] : ARRAY OF CHAR;
attrs [1] : ARRAY OF U.TagItem )
: BOOLEAN;
-102;
LIBCALL (base : AmigaGuideBasePtr) SendAmigaGuideCmd *
( cl [8] : AmigaGuideContext;
cmd [0] : ARRAY OF CHAR;
attrs [1]..: U.Tag )
: BOOLEAN;
-102;
LIBCALL (base : AmigaGuideBasePtr) SetAmigaGuideAttrsA *
( cl [8] : AmigaGuideContext;
attrs [9] : ARRAY OF U.TagItem )
: LONGINT;
-108;
LIBCALL (base : AmigaGuideBasePtr) SetAmigaGuideAttrs *
( cl [8] : AmigaGuideContext;
attrs [9]..: U.Tag )
: LONGINT;
-108;
LIBCALL (base : AmigaGuideBasePtr) GetAmigaGuideAttr *
( tag [0] : U.Tag;
cl [8] : AmigaGuideContext;
VAR storage [9] : ARRAY OF SYS.BYTE )
: LONGINT;
-114;
LIBCALL (base : AmigaGuideBasePtr) LoadXRef *
( lock [8] : D.FileLockPtr;
name [9] : ARRAY OF CHAR )
: LONGINT;
-126;
LIBCALL (base : AmigaGuideBasePtr) ExpungeXRef * ();
-132;
LIBCALL (base : AmigaGuideBasePtr) AddAmigaGuideHostA *
( h [8] : U.HookPtr;
name [0] : ARRAY OF CHAR;
attrs [9] : ARRAY OF U.TagItem )
: AmigaGuideHostPtr;
-138;
LIBCALL (base : AmigaGuideBasePtr) AddAmigaGuideHost *
( h [8] : U.HookPtr;
name [0] : ARRAY OF CHAR;
attrs [9]..: U.Tag )
: AmigaGuideHostPtr;
-138;
LIBCALL (base : AmigaGuideBasePtr) RemoveAmigaGuideHostA *
( hh [8] : AmigaGuideHostPtr;
attrs [9] : ARRAY OF U.TagItem )
: LONGINT;
-144;
LIBCALL (base : AmigaGuideBasePtr) RemoveAmigaGuideHost *
( hh [8] : AmigaGuideHostPtr;
attrs [9]..: U.Tag )
: LONGINT;
-144;
LIBCALL (base : AmigaGuideBasePtr) GetAmigaGuideString *
( id [0] : LONGINT )
: E.STRPTR;
-210;
(**-- Library Base variable --------------------------------------------*)
(**-----------------------------------*)
PROCEDURE* CloseLib ();
BEGIN (* CloseLib *)
IF base # NIL THEN E.base.CloseLibrary (base) END
END CloseLib;
(**-----------------------------------*)
PROCEDURE OpenLib * (mustOpen : BOOLEAN );
BEGIN (* OpenLib *)
IF base = NIL THEN
base :=
SYS.VAL (
AmigaGuideBasePtr,
E.base.OpenLibrary (name, E.libraryMinimum));
IF base # NIL THEN SYS.SETCLEANUP (CloseLib)
ELSIF mustOpen THEN HALT (100)
END;
END;
END OpenLib;
BEGIN
base := NIL
END AmigaGuide.